package org.archstudio.bna.logics.hints.coders;
import org.archstudio.bna.logics.hints.EncodedValue;
import org.archstudio.bna.logics.hints.IEncodedValue;
import org.archstudio.bna.logics.hints.IPropertyCoder;
import org.archstudio.bna.logics.hints.PropertyDecodeException;
public class NativePropertyCoder implements IPropertyCoder {
@Override
public IEncodedValue encode(IPropertyCoder masterCoder, Object value) {
if (value instanceof java.lang.String) {
return new EncodedValue("java.lang.String", (java.lang.String) value);
}
else if (value instanceof java.lang.Boolean) {
return new EncodedValue("java.lang.Boolean", ((java.lang.Boolean) value).toString());
}
else if (value instanceof java.lang.Byte) {
return new EncodedValue("java.lang.Byte", ((java.lang.Byte) value).toString());
}
else if (value instanceof java.lang.Short) {
return new EncodedValue("java.lang.Short", ((java.lang.Short) value).toString());
}
else if (value instanceof java.lang.Character) {
return new EncodedValue("java.lang.Character", ((java.lang.Character) value).toString());
}
else if (value instanceof java.lang.Integer) {
return new EncodedValue("java.lang.Integer", ((java.lang.Integer) value).toString());
}
else if (value instanceof java.lang.Long) {
return new EncodedValue("java.lang.Long", ((java.lang.Long) value).toString());
}
else if (value instanceof java.lang.Float) {
return new EncodedValue("java.lang.Float", ((java.lang.Float) value).toString());
}
else if (value instanceof java.lang.Double) {
return new EncodedValue("java.lang.Double", ((java.lang.Double) value).toString());
}
return null;
}
@Override
public Object decode(IPropertyCoder masterCoder, IEncodedValue encodedValue) throws PropertyDecodeException {
try {
String type = encodedValue.getType();
String data = encodedValue.getData();
if (type.equals("java.lang.String")) {
return data;
}
else if (type.equals("java.lang.Boolean")) {
return Boolean.parseBoolean(data) ? Boolean.TRUE : Boolean.FALSE;
}
else if (type.equals("java.lang.Byte")) {
return Byte.valueOf(Byte.parseByte(data));
}
else if (type.equals("java.lang.Short")) {
return Short.valueOf(Short.parseShort(data));
}
else if (type.equals("java.lang.Character")) {
return Character.valueOf(data.charAt(0));
}
else if (type.equals("java.lang.Integer")) {
return Integer.valueOf(Integer.parseInt(data));
}
else if (type.equals("java.lang.Long")) {
return Long.valueOf(Long.parseLong(data));
}
else if (type.equals("java.lang.Float")) {
return Float.valueOf(Float.parseFloat(data));
}
else if (type.equals("java.lang.Double")) {
return Double.valueOf(Double.parseDouble(data));
}
return null;
}
catch (Throwable t) {
throw new PropertyDecodeException(t);
}
}
}